import router from "@/router";
import {userInfoStore} from "@/store/userInfoStore.js";
import {userTokenStore} from "@/store/userTokenStore.js";
import { AccessEnum } from "@/access/accessEnums.js";
import CheckAccess from "@/access/checkAccess.js";
import {ElMessage} from "element-plus";

/**
 * 全局路由守卫,每一次用户路由跳转时判断用户的登录状态和权限状况
 */
router.beforeEach(async (to, from, next) => {
  // 获取当前登录用户
  let loginUser = userInfoStore().info;
  const needAccess = (to.meta?.access) ?? AccessEnum.NOT_LOGIN;
  // 如果登录访问的页面的权限为不需要登录，我们就直接放行
  if (needAccess === AccessEnum.NOT_LOGIN) {
    next();
  } else {
    // 如果用户不存在或者用户的角色不存在，说明用户没有登录， 我们需要向后端发起请求，获取用户信息
    if (!loginUser || !loginUser.user_role) {
      console.log("用户或者用户角色不存在");
      await userInfoStore().fetchLoginUser();
      loginUser = userInfoStore().info;
      console.log("loginUser: ",loginUser)
    }
    // 如果在上述已经在发起登录请求的基础上，还是没有找到对应的用户或者用户角色或者用户的角色为没有登录，我们就让用户返回登录面进行登录
    if (
      !loginUser ||
      !loginUser.user_role ||
      loginUser.user_role === AccessEnum.NOT_LOGIN
    ) {
      console.log("用户未登录")
      ElMessage.warning("用户未登录")
      next("/login?redirect=" + to.fullPath);
    } // 如果用户已经登录，但是权限不足，我们就让用户返回权限不足页面
    else {
      if (!CheckAccess(loginUser, needAccess)) {
        ElMessage.warning("权限不足")
        next("/NoAuth?redirect=" + to.fullPath);
      }
    }
  }
  // 如果用户已经登录，我们就直接放行
  next();
});
